home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 6105 < prev    next >
Encoding:
Text File  |  1996-08-05  |  2.6 KB  |  104 lines

  1. Path: alterdial.uu.net!not-for-mail
  2. From: rogerst@approach.com (Tom Rogers)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: Help?  need function to convert EBCDIC to ASCII
  5. Date: Thu, 22 Feb 1996 22:16:49 GMT
  6. Message-ID: <4gifh0$p70@alterdial.UU.NET>
  7. References: <4gdlva$6op@reader2.ix.netcom.com>
  8. NNTP-Posting-Host: 198.177.211.32
  9. X-Newsreader: Forte Free Agent 1.0.82
  10.  
  11. mrspoon@ix.netcom.com(David Witherspoon ) wrote:
  12.  
  13. >Hi,
  14. >need help finding a function or bit of C code that will convert 
  15. >EBCDIC to ASCII.
  16.  
  17. >Thanks,
  18.  
  19. >Dave
  20.  
  21. Here is EBC to ASC:
  22.  
  23. ---->8----Cut Here-----------
  24. #include <stdio.h>
  25. #include <stdlib.h>
  26.  
  27. static unsigned char ebc2asc[256] = {
  28.           0,  1,  2,  3,156,  9,134,127,151,141,142, 11, 12, 13, 14,
  29. 15,
  30.          16, 17, 18, 19,157,133,  8,135, 24, 25,146,143, 28, 29, 30,
  31. 31,
  32.         128,129,130,131,132, 10, 23, 27,136,137,138,139,140,  5,  6,
  33. 7,
  34.         144,145, 22,147,148,149,150,  4,152,153,154,155, 20, 21,158,
  35. 26,
  36.          32,160,161,162,163,164,165,166,167,168, 91, 46, 60, 40, 43,
  37. 33,
  38.          38,169,170,171,172,173,174,175,176,177, 93, 36, 42, 41, 59,
  39. 94,
  40.          45, 47,178,179,180,181,182,183,184,185,124, 44, 37, 95, 62,
  41. 63,
  42.         186,187,188,189,190,191,192,193,194, 96, 58, 35, 64, 39, 61,
  43. 34,
  44.         195, 97, 98,
  45. 99,100,101,102,103,104,105,196,197,198,199,200,201,
  46.  
  47. 202,106,107,108,109,110,111,112,113,114,203,204,205,206,207,208,
  48.  
  49. 209,126,115,116,117,118,119,120,121,122,210,211,212,213,214,215,
  50.  
  51. 216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,
  52.         123, 65, 66, 67, 68, 69, 70, 71, 72,
  53. 73,232,233,234,235,236,237,
  54.         125, 74, 75, 76, 77, 78, 79, 80, 81,
  55. 82,238,239,240,241,242,243,
  56.          92,159, 83, 84, 85, 86, 87, 88, 89,
  57. 90,244,245,246,247,248,249,
  58.          48, 49, 50, 51, 52, 53, 54, 55, 56,
  59. 57,250,251,252,253,254,255
  60. };
  61.  
  62.  
  63. main(int argc, char *argv[], char *envp[])
  64. {
  65.   FILE *fp, *fp2;
  66.   int ch, nch;
  67.  
  68.   if (argc<=1) {
  69.     printf("\a\nSyntax Error!\n\nSyntax:  EBC2ASC file\nWhere:  file =
  70. name of file to convert from EBCDIC to ASCII.\n");
  71.     return(2);
  72.   }
  73.  
  74.   /* Open temp file for write */
  75.   if ( (fp2=fopen("temp.fil", "w"))==NULL)
  76.      {
  77.       printf("\a\nError opening %s for write.\n", "temp.fil");
  78.       return(3);
  79.      }
  80.  
  81.   /* Open input file and process */
  82.   if ( (fp=fopen(argv[1], "r"))!=NULL ) {
  83.      while( (ch=fgetc(fp))!=EOF )
  84.         {
  85.           nch = ebc2asc[min(max(0, ch), 254)];
  86.           if (nch!=0) ch=nch;   /* Only convert if new is not NULL */
  87.           fputc(ch, fp2);
  88.         }
  89.      fclose(fp);
  90.      fclose(fp2);
  91.      remove(argv[1]);
  92.      rename("temp.fil", argv[1]);
  93.  
  94.   } else 
  95.    {
  96.     printf("\a\nError opening %s for read.\n", argv[1]);
  97.     return(4);
  98.    }
  99.  
  100.  return(0);
  101. }
  102.  
  103.  
  104.